﻿using Services.OtherServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace Services
{
    /// <summary>
    /// Cette classe permet d'interroger le service des utilisateurs en lui passant 
    /// le login et le mot de passe rentré par l'utilisateur
    /// </summary>
    public class ServiceUser
    {
        /// <summary>
        /// Retourne l'utilisateur de la table générique Utilisateur.
        /// Si l'utilisateur n'est pas trouvé ou si l'authentification a échoué, la méthode renvoit null.
        /// </summary>
        /// <param name="login">Login entré par l'utilisateur</param>
        /// <param name="mdp">Mot de passe entré par l'utilisateur</param>
        /// <returns>Retourne l'utilisateur authentifié. A noté que le mot de passe est haché en MD5.</returns>
        public static GENERAL_USER GetUser(String login, String mdp, String connectionOrNameString)
        {
            using (EntitiesRenovationSPP bdd = new EntitiesRenovationSPP(connectionOrNameString))
            {
                try
                {
                    // MD5
                    var md5 = new MD5CryptoServiceProvider();
                    var originalBytes = Encoding.Default.GetBytes(mdp);
                    var encodedBytes = md5.ComputeHash(originalBytes);

                    String mdpEncode = BitConverter.ToString(encodedBytes);
                    mdpEncode = mdpEncode.Replace("-", "");

                    // ANCIEN : SHA256
                    //byte[] bytes = Encoding.Unicode.GetBytes(mdp);
                    //SHA256Managed hashstring = new SHA256Managed();
                    //byte[] hash = hashstring.ComputeHash(bytes);
                    //string mdpEncode = string.Empty;

                    //foreach (byte x in hash)
                    //    mdpEncode += String.Format("{0:x2}", x);

                    return bdd.GENERAL_USER.First(u => u.LOGIN.Equals(login) && u.PASSWORD.ToUpper().Equals(mdpEncode.ToUpper()));
                }
                catch (Exception)
                {
                    return null;
                }
            }
        }
    }
}
